package com.ytjj.qmyx.admin.dao;

import com.ytjj.qmyx.admin.model.ProductSkuKey;
import com.ytjj.qmyx.admin.model.ProductSkuValue;
import com.ytjj.qmyx.admin.model.dto.BrandProductDto;
import com.ytjj.qmyx.admin.model.request.*;
import com.ytjj.qmyx.admin.model.response.*;
import com.ytjj.qmyx.admin.model.response.channel.ChannelProductDetailResponse;
import com.ytjj.qmyx.mall.model.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface ProductDao {

    List<ProductModelResponse> selectList(ProductRequest productRequest);

    List<ProductModelResponse> selectListV2(ProductRequest productRequest);

    List<ProductModelResponse> selectListById(@Param("ids") Integer[] ids,@Param("platformData") String platformData);

    List<ProductSpecial> getProductSpecial(ProductSpecialRequest productSpecialRequest);

    List<ProductSpec> getProductSpec(ProductSpecRequest productSpecialRequest);

    Integer updateProductSpecImg(@Param("proImg") String proImg, @Param("id") Integer id);

    List<ProductSpec> getProductSpecInfo(Integer productId);

    List<ProductImg> getProductImgs(ProductImgRequest productImgRequest);

    int checkedProduct(Integer productId);

    /**
     * 根据销售渠道商品查询已分配的商品
     */
    List<Product> getProductByBasicId(Integer productId,Integer flag);

    int checkedProductAdd(@Param("productId") Integer productId, @Param("specialType") String specialType);

    List<ProductStockGroupResponse> productStockGroup();

    int updateStock(Integer productId, Integer stockSum);

    int isHomeFlag(Integer id, Integer homeFlag);

    Product getProductById(Integer productId);

    Integer getProductCount();

    Integer getProductCountByStatus(Integer status);

    Integer updateIsHide(@Param("productId") Integer productId,@Param("isHide") Integer isHide);

    List<StockRemindResponse> getStockInfo(Integer stock);

    List<ProductModelResponse> syncList();

    Integer syncSpec(@Param("productId") Integer productId, @Param("curPrice") BigDecimal curPrice);

    Integer syncEvaluationProduct(Product product);

    Integer getZeroCount(Integer bankerId);

    Integer isExists(Integer bankerProductId);

    List<Product> selectByBankerProductId(Integer bankerProductId);

    List<ProductLifeResponse> getAllProductForum(ProductLifeRequest productLifeRequest);

    List<ProductLifeResponse> getProductLifeByType(ProductLifeRequest productLifeRequest);

    List<ProductLifeResponse> getRecommendProduct(ProductLifeRequest productLifeRequest);

    List<ProductLifeResponse> getZeroProduct(ProductLifeRequest productLifeRequest);

    List<ProductLifeResponse> getLeakProduct(ProductLifeRequest productLifeRequest);

    List<ProductLifeResponse> getWalletProduct(ProductLifeRequest productLifeRequest);

    Integer getForumProductNum(String forumType);

    List<BrandProductDto> getBrandProductsByBankerId(@Param("bankerId") Integer bankerId, @Param("productName") String productName, @Param("id") Integer id);

    Integer updateStatus(@Param("id") Integer id, @Param("status") Integer status);

    Integer updateSeckillDate(@Param("id") Integer id, @Param("extra") String extra);

    Integer updateProductParam(ProductParamRequest productParamRequest);

    List<String> getActivityType(Integer bankerProductId);

    List<LifeHomeFlagResponse> getLifeHomeFlagList(LifeHomeFlagRequest lifeHomeFlagRequest);

    List<HomeFlagResponse> chooseHomeFlag(@Param("platformType") String platformType, @Param("productName") String productName);

    int updateHomeFlag(@Param("id") Integer id, @Param("homeFlag") Integer homeFlag);

    int updateStatusByBankerId(@Param("bankerId") Integer bankerId, @Param("status") Integer status);

    int updateStatusByBrandId(@Param("brandId") Integer brandId, @Param("status") Integer status);

    List<Product> queryAllByBankerProductIds(List<Integer> bankerProductIds);

    int updateStatusBybankerProductIds(@Param("bankerProductIds") List<Integer> bankerProductIds, @Param("status") Integer status);

    Integer judgeStatus(Integer productId);

    BankerBrand getBrandByBankerId(@Param("brandId") Integer brandId);

    void updateCategoryId(@Param("id") Integer id,
                          @Param("topCategoryId") Integer topCategoryId,
                          @Param("categoryId") Integer categoryId,
                          @Param("bottomCategoryId") Integer bottomCategoryId,
                          @Param("appraisalType") Integer appraisalType
    );

    List<DynamicsProductResp> selectByIds(@Param("productIdList") List<Integer> productIdList);

    List<Product> selectProductByIds(@Param("list") List<Integer> ids);

    List<Product> getProductNotInSubject(@Param("productName") String productName,@Param("platformData") String platformData);

    List<Product> getProductInSubject(@Param("productName") String productName,@Param("platformData") String platformData);

    List<ProductChannelResponse> getChannelProductList(ProductChannelRequest request);

    /**
     * 查询地区销售渠道的商品
     */
    List<ProductChannelResponse> getChannelProductListForArea(ProductChannelRequest request);

    /**
     * 获取地区销售渠道商品主商品
     */
    List<ProductChannelResponse> getAreaMainProductList(ProductChannelRequest request);

    ChannelProductDetailResponse getChannelProductDetailApp(Integer productId);

    int insertIncludeId(Product product);

    int updateInfo(Product product);

    int updateByEntity(Product groupProduct);

    int updateProductFreightId(@Param("productId")Integer productId,@Param("freightId")Integer freightId);

    int insertEntity(Product product);

    List<Product> selectBySupplyIdAndPlatformData(Integer supplyProductId,String platformData);

    List<Product> selectBySupplyProductId(Integer supplyProductId);

    void updateCategoryBySupplyProductId(@Param("supplyProductId")Integer supplyProductId,@Param("topCategoryId") Integer topCategoryId,@Param("categoryId") Integer categoryId,@Param("bottomCategoryId") Integer bottomCategoryId);

    List<Product> selectNotHaveTemplate(@Param("ids") List<Integer> ids);

    List<Product> selectUpAndNotHaveTemplate();

    List<Product> findProductNo(String platform);

    Integer findProductIdByProductNo(String productNo);

    List<ProductImg> findProductImgByProductId(Integer productId);

    int insertProductSkuKy(Integer newProductId,Integer h5ProductId);

    List<ProductSkuKey> findProductSkuKeys(Integer pid);

    List<ProductSkuValue> findProductSkuValues(Integer kid);

    List<ProductSpec> findProductSpecs(Integer productId);

    List<Product> queryBySupplyIdAndPlatformData(@Param("supplyProductIds") List<Integer> supplyProductIds, @Param("platformDatas") List<String> platformDatas);

    List<Product> queryAreaProductBySupplyIds(@Param("supplyProductIds") List<Integer> supplyProductIds);
}
